iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
自我挑戰組

IT工具與自我學IT的過程分享系列 第 21

Day 1|銅板價玩影像 AI:ESP32-CAM 一週實作指南

  • 分享至 

  • xImage
  •  

Day 1|ESP32-CAM 是誰?能幹嘛?(規格 × 亮點 × 限制 × 一次看懂)

今天先把 ESP32-CAM 認識清楚:它不是單眼、也不是監視器;它是「會拍照的微控制器」,自帶 Wi-Fi/BT、支援相機模組(常見 OV2640),體積小、很便宜。
用一句話形容:能用銅板價,把你的點子拍成現實。


1) 三分鐘速懂:腦中地圖

[鏡頭 OV2640] -> [ESP32 (JPEG 壓縮 / 緩衝 / 控制)] -> [Wi-Fi 傳到網路]
                                  |                     ├─ HTTP 串流(/stream)
                                  |                     ├─ 單張快照(/capture)
                                  ├─ microSD 存圖       └─ MQTT(事件/拍照指令)
                                  └─ GPIO(補光、蜂鳴器、感測器)

重點:ESP32-CAM 沒有一般電腦的作業系統,它靠「韌體」把事做好;省電、便宜,但算力有限(重 AI 交給後端像是 Raspberry Pi 5)。


2) 規格與亮點

類別 重點 為什麼重要
感光元件 OV2640 2MP(最高 1600×1200,常用 640×480) 解析度越高,影像越清、延遲與檔案也會變大
MCU ESP32 雙核 240 MHz、Wi-Fi 2.4G、BLE 一片搞定網路+控制
記憶體 PSRAM 4 MB 影像緩衝很關鍵,沒有 PSRAM 會很痛苦
儲存 microSD(FAT32) 定時拍照、事件存證很好用
供電 5V/≥1A 建議 供電不穩 = 初始化相機失敗 80% 兇手
價格 親民(百元級) 你會不小心買三片

優勢:便宜、省電、快速開發、可串 HTTP/MQTT、能當「多點前端相機」。
限制無原生 USB(刷機靠 USB-TTL)、RAM 小、算力弱(臉辨/偵測交給後端如 Pi 5)。

https://ithelp.ithome.com.tw/upload/images/20251005/20178823LoBU0HSdQZ.jpg

3) 最常見的三種用途

  1. 門口管家:偵測到人 → 拍照 → LINE 通知
  2. 植物/實驗 timelapse:每 5 分鐘一張,週末變成縮時影片
  3. 客流/事件蒐證:前端僅拍攝,後端(Pi 5)負責分析、存檔、儀表板

迷你流程圖(門口管家)

[ESP32-CAM] --(MJPEG / HTTP)--> [Pi 5 (OpenCV/TFLite)]
                             ├─ 儲存到 NVMe
                             └─ LINE/Telegram 通知

4) 第一次上手:硬體接線 & 刷韌體心法

4.1 刷機模式接線表(USB-TTL ↔ ESP32-CAM)

USB-TTL ESP32-CAM 說明
5V 5V 先顧穩 5V 才有畫面
GND GND 共地
TX U0R 交叉連線
RX U0T 交叉連線
IO0 GND 進入刷機模式(寫完要拔掉)

刷完後:拔 IO0→GND,按 RST 重開,回一般模式。

4.2 Arduino IDE 設定(超快速)

  • 安裝套件:esp32 by Espressif Systems
  • 板子:AI Thinker ESP32-CAM
  • PSRAM:Enabled;Partition 可選 Huge APP
  • 範例:CameraWebServer → 填 Wi-Fi → 上傳 → 串流起飛

5) 「能跑就好」的兩段範例

5.1 拍一張存到 SD(Arduino C++)

#include "esp_camera.h"
#include "FS.h"
#include "SD_MMC.h"

void setup(){
  // ... 省略 Wi-Fi 與 camera_config_t ...
  SD_MMC.begin("/sdcard", true); // 1-bit 模式常見,避免供電不穩
}

void loop(){
  camera_fb_t * fb = esp_camera_fb_get();
  if (!fb) return;
  static int n=0;
  String path = "/" + String(n++) + ".jpg";
  File f = SD_MMC.open(path, FILE_WRITE);
  if (f) { f.write(fb->buf, fb->len); f.close(); }
  esp_camera_fb_return(fb);
  delay(5000); // 每 5 秒存一張
}

5.2 Python 端讀串流(OpenCV,看得到就成功 80%)

import cv2
cap = cv2.VideoCapture("http://<ESP32-IP>/stream")  # 或者 :81/stream 視範例定義
while True:
    ok, frame = cap.read()
    if not ok: break
    cv2.imshow("ESP32-CAM", frame)
    if cv2.waitKey(1) == 27: break  # 按 ESC 離開
cap.release(); cv2.destroyAllWindows()

6) 解析度 vs 延遲(概念表)——「先小後大」是王道

解析度            端到端延遲(概念)
QVGA  (320x240)   ■■■□□□□  (~120ms)
VGA   (640x480)   ■■■■□□  (~200ms)
SVGA  (800x600)   ■■■■■□  (~320ms)
XGA  (1024x768)   ■■■■■■  (~480ms)
Tips:先用 QVGA/VGA 把串流與網路調順,再逐步拉高解析度與畫質。

7) 常見坑位與救命小抄

症狀 可能原因 快速解
Camera init failed 供電不足 用 5V/≥1A;別只靠 USB-TTL 供電
上傳卡住 刷機腳位 刷機:IO0→GND;一般:IO0 要拔掉
找不到 IP Wi-Fi 設錯或訊號弱 靠近 AP、檢查 SSID/密碼大小寫
串流很卡 解析度過高/網路擁塞 降解析度、幀率;儘量靠近 AP
SD 卡寫入失敗 格式/接觸不良 FAT32 重新格式化、換卡測試

8) 三個超有梗的實例(你今天就能做)

A. 智慧門口管家(最小可跑)

  • ESP32-CAM:跑 CameraWebServer
  • Pi/PC:OpenCV 偵測「畫面變化」→ 存 JPG 到 events/ → LINE 通知
  • 晚上 11:00 〜 早上 6:00 才觸發(減少誤報)

B. 植物縮時相簿

  • 每 10 分鐘 /capture 一張 → 存到伺服器資料夾
  • 一天 144 張 → ffmpeg 合成成 10 秒縮時影片

C. 「拍照 API」服務

  • 在 ESP32-CAM 開一個 /shot 路由:每次 GET 就拍一張回傳
  • 你可以用瀏覽器、IFTTT、或任何後端程式直接取圖

9) Day 1 完成清單 ✅

  • [ ] 了解 ESP32-CAM 的定位與限制
  • [ ] 準備 USB-TTL、杜邦線、足夠的 5V 供電
  • [ ] 上傳 CameraWebServer,成功看到串流
  • [ ] 用 PC 抓到影像(OpenCV)
  • [ ] 決定你要玩哪一個入門應用(門口管家/縮時相簿/拍照 API)

10) 明天預告(Day 2)

  • 從 0 到 1:把你的 ESP32-CAM 變成「穩定的 Wi-Fi 相機」
  • 調參、降延遲、SD 卡 timelapse、HTTP/MQTT、以及「我才不想半夜誤報」的設定術 😎

上一篇
Day 3|全家族選購指南:Pi 5 vs Pi 4 / Zero 2 W / 400 / Pico(超好懂+圖表+實例)
下一篇
Day 2|第一次上手:刷韌體、跑 CameraWebServer
系列文
IT工具與自我學IT的過程分享22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言